package org.xx.armory.docs;

import java.io.IOException;
import java.io.OutputStream;

/**
 * 输出模板。
 *
 * @author Haart
 */
public interface Template {
    /**
     * 获取模板的标题。
     *
     * @return 模板的标题。
     */
    String getTitle();

    /**
     * 获取模板的作者。
     *
     * @return 模板的作者。
     */
    String getAuthor();

    /**
     * 获取模板的主题。
     *
     * @return 模板的主题。
     */
    String getSubject();

    /**
     * 获取模板的关键字。
     *
     * @return 模板的关键字, 如果不包含关键字则返回空数组。
     */
    String[] getKeywords();

    /**
     * 使用此模板和模板上下文中的数据输出文档到输出流。
     *
     * @param out
     *         输出文档的输出流。
     * @param context
     *         包含数据的模板上下文。
     * @throws IOException
     *         如果输出到输出流时出现错误。
     * @throws IllegalArgumentException
     *         如果参数{@code out}或者{@code context}是{@code null}。
     */
    void render(
            OutputStream out,
            TemplateContext context
    )
            throws IOException;
}
